package day0720API;

public class Test7 {
    public static void main(String[] args) {
        Integer i1=Integer.valueOf(1);//valueOf()会创建一个Integer对象封装了一个1
        //创建一个Integer对象，将整数1赋值给对象的成员变量value
        System.out.println(i1);//打印一个对象java会调用此对象的toString方法，将成员变量转化为String字符串
        System.out.println(i1.toString());

        Integer  i2=new Integer(1);//自己new一个Integer对象(另一种可以用valueOf生成Integer对象)
        System.out.println(i1==i2);

        //5.Integer.valueOf()方法创建的Integer对象：　  会将 -128   127范围内的对象只创建一份儿
        //逻辑：如果valueOf方法需要创建表示-128   127范围内的对象首先会用IntegerCache.cache()查找Integer封装的数组中
        //是否有此Integer对象，如果有就直接采用(返回)， 如果没有就在IntegerCache.cache()方法中创建Integer对象
        //如果在-128   127范围外，每次执行valueOf()方法都会new Integer对象。
        Integer i3=Integer.valueOf(1);
        Integer i4=Integer.valueOf(1);
        //因为i3和i4表示的是整数1，所以java会只创建一个Integer对象来封装1，用i3和i4变量同时代表此对象
        //所以比较地址为true
        System.out.println(i3==i4);

        Integer  i5=new Integer(1);
        Integer  i6=new Integer(1);
        System.out.println(i5==i6);


        Double  d1=Double.valueOf(3.14);//Double.valueOf没有缓存对象的特性
        Double  d2=Double.valueOf(3.14);
        System.out.println(d1==d2);


        //Double类中的成员方法： doubleValue() ， 将Double对象转化为double基本类型
        double d3=d1.doubleValue();
        System.out.println(d3);

        //Integer类中的成员方法： intValue() ， 将Integer对象转化为int基本类型
        int i7=i5.intValue();
        System.out.println(i7);

        Long  o1=Long.valueOf(5L);
        long o2=o1.longValue();

    }
}